package com.mindskip.xzs.service.impl;
//这段代码是一个文本内容的业务逻辑实现类，主要作用如下：
//1. 通过构造函数注入依赖的TextContentMapper，实现了依赖注入。
//2. 实现了根据ID查找TextContent、过滤插入TextContent、根据ID过滤更新TextContent等基本方法。
//3. 实现了将列表转换为JSON并插入、将列表转换为JSON并更新TextContent的方法，其中可以通过传入mapper函数来对列表中的元素进行转换处理。
//4. 这段代码在前端主要用于处理文本内容的相关业务逻辑，包括查询、插入、更新等操作。在后端则实现了对数据库的操作，
// 并且对列表中的数据进行转换处理，将处理后的数据以JSON格式存储到数据库中或更新数据库中的TextContent记录。
import com.mindskip.xzs.domain.TextContent;
import com.mindskip.xzs.repository.TextContentMapper;
import com.mindskip.xzs.service.TextContentService;
import com.mindskip.xzs.utility.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

// 标注为服务层组件
@Service
public class TextContentServiceImpl extends BaseServiceImpl<TextContent> implements TextContentService {

    // 声明所需的依赖
    private final TextContentMapper textContentMapper;

    // 构造函数注入所需的依赖
    @Autowired
    public TextContentServiceImpl(TextContentMapper textContentMapper) {
        super(textContentMapper);
        this.textContentMapper = textContentMapper;
    }

    // 根据ID查找TextContent的方法
    @Override
    public TextContent selectById(Integer id) {
        return super.selectById(id);
    }

    // 过滤插入TextContent的方法
    @Override
    public int insertByFilter(TextContent record) {
        return super.insertByFilter(record);
    }

    // 根据ID过滤更新TextContent的方法
    @Override
    public int updateByIdFilter(TextContent record) {
        return super.updateByIdFilter(record);
    }

    // 将列表转换为JSON并插入的方法
    @Override
    public <T, R> TextContent jsonConvertInsert(List<T> list, Date now, Function<? super T, ? extends R> mapper) {
        String frameTextContent = null;
        if (null == mapper) {
            // 如果mapper为空，直接将列表转换为JSON
            frameTextContent = JsonUtil.toJsonStr(list);
        } else {
            // 如果mapper不为空，先将列表中的元素转换，然后再转换为JSON
            List<R> mapList = list.stream().map(mapper).collect(Collectors.toList());
            frameTextContent = JsonUtil.toJsonStr(mapList);
        }
        // 创建TextContent对象并返回
        TextContent textContent = new TextContent(frameTextContent, now);
        return textContent;
    }

    // 将列表转换为JSON并更新TextContent的方法
    @Override
    public <T, R> TextContent jsonConvertUpdate(TextContent textContent, List<T> list, Function<? super T, ? extends R> mapper) {
        String frameTextContent = null;
        if (null == mapper) {
            // 如果mapper为空，直接将列表转换为JSON
            frameTextContent = JsonUtil.toJsonStr(list);
        } else {
            // 如果mapper不为空，先将列表中的元素转换，然后再转换为JSON
            List<R> mapList = list.stream().map(mapper).collect(Collectors.toList());
            frameTextContent = JsonUtil.toJsonStr(mapList);
        }
        // 更新TextContent的内容并返回
        textContent.setContent(frameTextContent);
        return textContent;
    }

}
